/**
 * describe:
 *
 * @author chaP
 * @date 2019/03/11
 */
package CodingTest.AC20190311;

/**
 * 题目描述
 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能，但是string不符合数字要求时返回0)，要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
 输入描述:
 输入一个字符串,包括数字字母符号,可以为空
 输出描述:
 如果是合法的数值表达则返回该数字，否则返回0
 示例1
 输入

 +2147483647
 1a33
 输出

 2147483647
 */
public class StrInt {
    public int StrInt(String str){
        if((str.charAt(0) == 0 && str.length() == 1)|| str.length() == 0)return 0;
        int sum = 0,k = 1,a;
        if(str.charAt(0) == '+'||(str.charAt(0)<='9'&&str.charAt(0)>'0')){
            for(int i = str.length()-1;i>0;i--){
                if(str.charAt(i)>'9'||str.charAt(i)<'0') {
                    return 0;
                }else {
                     a = str.charAt(i) - '0';
                     sum+=a*k;
                     k*=10;
                }
            }
            if(str.charAt(0) != '+')
                sum=sum+(str.charAt(0)-'0')*k;
            return sum;
        }else if(str.charAt(0) == '-'){
            for(int i = str.length()-1;i>0;i--){

                if(str.charAt(i)>'9'||str.charAt(i)<'0') {
                    return 0;
                }else {
                    a = str.charAt(i) - '0';
                    sum-=a*k;
                    k*=10;
                }
            }return sum;

        }
        else{
            return 0;
        }
    }

    public static void main(String[] args) {
        StrInt st = new StrInt();
        String s = "-123";
        System.out.println(st.StrInt(s));
    }
}
